home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Tools⁄Additions / InsideBa1994 / InsideBasic-94 / IB 94 / Alpha Dollars / Alpha Dollars (Z)
Text File  |  1991-11-21  |  6KB  |  177 lines

  1.  
  2.  
  3. ' | =======================================================================
  4. ' |
  5. ' | -- Function Alpha Dollars -- By Jerry W. Guy (JGUY@Pro-Finders.CTS.COM)
  6. ' |                                 201 Randomwood Lane
  7. ' |                                 New Bern, NC 28562
  8. ' |   FN Alpha$(AD_Value$)
  9. ' |
  10. ' | This function is used to convert a numeric value to the equivelant
  11. ' | value in words. The returned string is in the same format used to
  12. ' | printout a check amount or a fee in a legal contract. The digits to
  13. ' | the right of 2 places are truncated not rounded up. 12.349 = 12.340
  14. ' |
  15. ' | 343.23 = "Three Hundred Forty Three and 23/100 Dollars"
  16. ' |
  17. ' | To use this function
  18. ' | Just plug your dollar value into the STRING passed to the function
  19. ' |
  20. ' | Check_string$ = FN Alpha$(STR$(123456.89))
  21. ' |
  22. ' | * * * The value MUST NOT be greater than the Quadrillions (1E+19) * * *
  23. ' |
  24. LONG FN Alpha$(AD_Value$)
  25. ' |
  26. ' | Initialize a few variables
  27. ' | The AD_Position% variable is used to offset into the words to get
  28. ' | hundreds, thousands, etc..
  29. ' | the 28th entry is Hundred
  30. AD_Position% = 28
  31. AD_Return$ = ""
  32. ' |
  33. ' | Do a range check on the VAL of the string to prevent out of bounds
  34. ' | subscripting etc..
  35. ' |
  36. WHILE VAL(AD_Value$) > 0 AND VAL(AD_Value$) < 1E+19
  37. ' |
  38. ' | If this is the first time the function is called load up the
  39. ' | AD_Words$ table with the appropriate values
  40. ' |
  41.     LONG IF AD_1sttime% = 0
  42.  
  43.         DATA One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
  44.         DATA Eleven, Twelve, Thirteen, Fourteen, Fifteen, Sixteen, Seventeen
  45.         DATA Eighteen, Nineteen, Twenty, Thirty, Forty, Fifty, Sixty, Seventy
  46.         DATA Eighty, Ninety, Hundred,Thousand, Million, Billion, Trillion
  47.         DATA Quadrillion
  48.  
  49.          DIM 18 AD_Words$(33)
  50.  
  51.         FOR AD_1sttime% = 1 TO 33
  52.            READ AD_Words$(AD_1sttime%)
  53.         NEXT AD_1sttime%
  54.  
  55.     END IF
  56. ' |
  57. ' | Dealing with a sting instead of a numeric value means being careful!
  58. ' | Check for Comma's in the input string and get em out.
  59. ' |
  60.    WHILE INSTR(1,AD_Value$,",")
  61.         ADH_Temp$ = ""
  62.         FOR AD_Index% = 1 TO LEN(AD_Value$)
  63.           LONG IF MID$(AD_Value$,AD_Index%,1) <> ","
  64.              ADH_Temp$ = ADH_Temp$ + MID$(AD_Value$,AD_Index%,1)
  65.           END IF
  66.         NEXT AD_Index%
  67.         AD_Value$ = ADH_Temp$
  68.    WEND
  69. ' |
  70. ' | We Have to get the cents out of the string and watch
  71. ' | for assumed 00 assumed 0 after single digit and too
  72. ' | many digits after the decimal point
  73. ' |
  74. ' | Kludge around numbers longer than 12 digits!
  75. ' |
  76.       AD_Cents$ = MID$( STR$ (FRAC (VAL (RIGHT$(AD_Value$,10)))),3,2)
  77. ' |
  78. ' |         If we have a blank string put in the zeros
  79. ' |
  80.       IF LEN(AD_Cents$) = 0 THEN AD_Cents$ = "00"
  81. ' |
  82. ' |         if we have a short string add a trailing zero
  83. ' |
  84.       IF LEN(AD_Cents$) = 1 THEN AD_Cents$ = AD_Cents$ + "0"
  85. ' |
  86. ' | OK Now we got the pennies straight in AD_Cents$ lets get to the
  87. ' | Big numbers starting from the right working up the amount string.
  88. ' |
  89. ' | Get the whole dollars to play with.
  90. ' |
  91.       AD_Decimal% = INSTR(1,AD_Value$,".")
  92.       AD_Whole$ = LEFT$(AD_Value$,AD_Decimal%-1)
  93. ' |
  94. ' | This is the main process of the program. It takes a hunk of
  95. ' | 3 characters starting from the right of the whole number and
  96. ' | builds a sting with it
  97. ' |
  98.       ADH_Temp$ = ""
  99.       WHILE LEN(AD_Whole$) > 0
  100.         AD_Whole_Value$ = RIGHT$(AD_Whole$,3)
  101.         LONG IF VAL(AD_Whole_Value$) > 0
  102.           LONG IF VAL(AD_Whole_Value$) > 99
  103.                  ADH_Temp$ = AD_Words$( VAL (LEFT$ (AD_Whole_Value$,1)))
  104.                  ADH_Temp$ = ADH_Temp$ + " " + AD_Words$(28)
  105.           END IF
  106.           AD_Whole_Value$ = RIGHT$(AD_Whole_Value$,2)
  107.           LONG IF VAL(AD_Whole_Value$) > 0
  108.                                 LONG IF VAL(AD_Whole_Value$) > 20
  109.                        ADH_Temp$ = ADH_Temp$ + " " + AD_Words$(VAL(LEFT$(AD_Whole_Value$,1))+18)
  110.                 LONG IF VAL(MID$(AD_Whole_Value$,2,1)) > 0
  111.                      ADH_Temp$  = ADH_Temp$ + "-"
  112.                      AD_Lcase$ = AD_Words$(VAL(RIGHT$(AD_Whole_Value$,1)))
  113.                      POKE VARPTR(AD_Lcase$)+1,PEEK(VARPTR(AD_Lcase$)+1)+32
  114. ' |                HUH??
  115. ' | The Poke and peek here are to convert the firts digit of the
  116. ' | number after the dash to lower case.
  117. ' |
  118.                      ADH_Temp$ = ADH_Temp$ + AD_Lcase$
  119.                 END IF
  120.              XELSE
  121.                 ADH_Temp$ = ADH_Temp$ + " " + AD_Words$(VAL(AD_Whole_Value$))
  122.              END IF
  123.           END IF
  124.           LONG IF AD_Position% > 28
  125.               ADH_Temp$ = ADH_Temp$ + " " + AD_Words$(AD_Position%)
  126.           END IF
  127.           AD_Return$ = ADH_Temp$ + " " + AD_Return$
  128.      END IF
  129. ' |
  130. ' | Move the position multiplier to the next range
  131. ' |
  132.      AD_Position% = AD_Position% + 1
  133. ' |
  134. ' | If there are less than 3 characters in the string were done
  135. ' |
  136.      LONG IF LEN(AD_Whole$) > 3
  137.             AD_Whole$ = LEFT$(AD_Whole$,LEN(AD_Whole$)-3)
  138.      XELSE
  139.             AD_Whole$ = ""
  140.      END IF
  141. ' |
  142. ' | The next check is to fix an extra space that would show up in
  143. ' | the string
  144. ' |
  145.      LONG IF LEFT$(AD_Return$,1) = " "
  146.               AD_Return$ = MID$(AD_Return$,2,LEN(AD_Return$))
  147.      END IF
  148.                        ADH_Temp$ = ""
  149.     WEND
  150. ' |  ^
  151. ' |  End of the main program logic. Now we should have a value string in
  152. ' |  AD_Return$.
  153. ' |
  154. ' |
  155.   AD_Value$ = ""
  156. WEND
  157. ' |
  158. ' | End of when the value is in range
  159. ' |
  160.   LONG IF LEN(AD_Return$)
  161.       AD_Return$ = AD_Return$ + "and " + AD_Cents$ + "/100 Dollars"
  162.   XELSE
  163.       AD_Return$ = "Error!"
  164.   END IF
  165.  
  166. END FN = AD_Return$ ' End of Alpha$ Function
  167. '
  168. ' That's all folks the following lines test out the function.
  169. '
  170. "begin"
  171. DO
  172.   INPUT "Enter a # between 1 and 999999999999999999 (no commas) -> ";VALUE$
  173.   PRINT FN Alpha$(VALUE$)
  174. UNTIL VALUE$ = ""
  175.  
  176.  
  177.